package com.huan.netty01.client;

import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;

import java.net.InetSocketAddress;
import java.nio.charset.Charset;

/**
 * @author 作者:刘欢
 * @create 2024-03-22-17:45
 */
public class Client3 {

    public static void main(String[] args) {
//            Channel channel = ...;
            Bootstrap channel = new Bootstrap();
            //不会阻塞
            // 1.异步连接到远程对等节点。调用立即返回并提供 ChannelFuture。
            ChannelFuture future = channel.connect(
                new InetSocketAddress("192.168.1.3", 8888));

            //2.操作完成后通知注册一个 ChannelFutureListener 。
            future.addListener(new ChannelFutureListener() {
            @Override
            public void operationComplete(ChannelFuture future) {
                //3.当 operationComplete() 调用时检查操作的状态
                if (future.isSuccess()) {
                    ByteBuf buffer = Unpooled.copiedBuffer(
                            //4.如果成功就创建一个 ByteBuf 来保存数据。
                            "Hello", Charset.defaultCharset());
                    //5.异步发送数据到远程。再次返回ChannelFuture。
                    ChannelFuture wf = future.channel().writeAndFlush(buffer);

                } else {
                    //6.如果有一个错误则抛出 Throwable,描述错误原因。
                    Throwable cause = future.cause();
                    cause.printStackTrace();
                }
            }
        });
    }

}
